From 12d976d45d43f5d6a987c4d179f552f9ef857239 Mon Sep 17 00:00:00 2001 From: Felix Krull Date: Sat, 31 Aug 2019 14:26:10 +0200 Subject: [PATCH] Make kernel_args compile --- rust-bindings/rust/src/kernel_args.rs | 41 ++++++++++++--------- rust-bindings/rust/src/tests/kernel_args.rs | 39 ++++++++++++++++++++ rust-bindings/rust/src/tests/mod.rs | 1 + 3 files changed, 63 insertions(+), 18 deletions(-) create mode 100644 rust-bindings/rust/src/tests/kernel_args.rs diff --git a/rust-bindings/rust/src/kernel_args.rs b/rust-bindings/rust/src/kernel_args.rs index 3d1ed4dc..018964a4 100644 --- a/rust-bindings/rust/src/kernel_args.rs +++ b/rust-bindings/rust/src/kernel_args.rs @@ -6,6 +6,7 @@ use glib::translate::*; #[cfg(any(feature = "v2019_3", feature = "dox"))] use glib::GString; use ostree_sys; +use ostree_sys::OstreeKernelArgs; use std::fmt; use std::ptr; use Error; @@ -15,7 +16,7 @@ glib_wrapper! { pub struct KernelArgs(Boxed); match fn { - copy => |ptr| ostree_sys::ostree_kernel_args_copy(mut_override(ptr)), + copy => |_ptr| unimplemented!(), free => |ptr| ostree_sys::ostree_kernel_args_free(ptr), } } @@ -28,7 +29,7 @@ impl KernelArgs { } } - #[cfg(any(feature = "v2019_3", feature = "dox"))] + /*#[cfg(any(feature = "v2019_3", feature = "dox"))] pub fn append_argv(&mut self, argv: &str) { unsafe { ostree_sys::ostree_kernel_args_append_argv( @@ -47,7 +48,7 @@ impl KernelArgs { prefixes.to_glib_none().0, ); } - } + }*/ #[cfg(any(feature = "v2019_3", feature = "dox"))] pub fn append_proc_cmdline>( @@ -103,10 +104,10 @@ impl KernelArgs { } #[cfg(any(feature = "v2019_3", feature = "dox"))] - pub fn get_last_value(&mut self, key: &str) -> Option { + pub fn get_last_value(&self, key: &str) -> Option { unsafe { from_glib_none(ostree_sys::ostree_kernel_args_get_last_value( - self.to_glib_none_mut().0, + self.to_glib_none().0 as *mut OstreeKernelArgs, key.to_glib_none().0, )) } @@ -146,7 +147,7 @@ impl KernelArgs { } } - #[cfg(any(feature = "v2019_3", feature = "dox"))] + /*#[cfg(any(feature = "v2019_3", feature = "dox"))] pub fn replace_argv(&mut self, argv: &str) { unsafe { ostree_sys::ostree_kernel_args_replace_argv( @@ -154,7 +155,7 @@ impl KernelArgs { argv.to_glib_none().0, ); } - } + }*/ #[cfg(any(feature = "v2019_3", feature = "dox"))] pub fn replace_take(&mut self, arg: &str) { @@ -167,30 +168,28 @@ impl KernelArgs { } #[cfg(any(feature = "v2019_3", feature = "dox"))] - fn to_string(&mut self) -> GString { + fn to_gstring(&self) -> GString { unsafe { from_glib_full(ostree_sys::ostree_kernel_args_to_string( - self.to_glib_none_mut().0, + self.to_glib_none().0 as *mut OstreeKernelArgs, )) } } #[cfg(any(feature = "v2019_3", feature = "dox"))] - pub fn to_strv(&mut self) -> Vec { + pub fn to_strv(&self) -> Vec { unsafe { FromGlibPtrContainer::from_glib_full(ostree_sys::ostree_kernel_args_to_strv( - self.to_glib_none_mut().0, + self.to_glib_none().0 as *mut OstreeKernelArgs, )) } } - //#[cfg(any(feature = "v2019_3", feature = "dox"))] - //pub fn cleanup(loc: /*Unimplemented*/Option) { - // unsafe { TODO: call ostree_sys:ostree_kernel_args_cleanup() } - //} + // Not needed + //pub fn cleanup(loc: /*Unimplemented*/Option) #[cfg(any(feature = "v2019_3", feature = "dox"))] - pub fn from_string(options: &str) -> Option { + pub fn from_string(options: &str) -> KernelArgs { unsafe { from_glib_full(ostree_sys::ostree_kernel_args_from_string( options.to_glib_none().0, @@ -199,7 +198,7 @@ impl KernelArgs { } #[cfg(any(feature = "v2019_3", feature = "dox"))] - pub fn new() -> Option { + pub fn new() -> KernelArgs { unsafe { from_glib_full(ostree_sys::ostree_kernel_args_new()) } } } @@ -214,6 +213,12 @@ impl Default for KernelArgs { impl fmt::Display for KernelArgs { #[inline] fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", self.to_string()) + write!(f, "{}", self.to_gstring()) + } +} + +impl> From for KernelArgs { + fn from(v: T) -> Self { + KernelArgs::from_string(v.as_ref()) } } diff --git a/rust-bindings/rust/src/tests/kernel_args.rs b/rust-bindings/rust/src/tests/kernel_args.rs new file mode 100644 index 00000000..0e081882 --- /dev/null +++ b/rust-bindings/rust/src/tests/kernel_args.rs @@ -0,0 +1,39 @@ +#[cfg(feature = "v2019_3")] +use crate::KernelArgs; + +#[test] +fn should_create_and_fill_kernel_args() { + let mut args = KernelArgs::new(); + args.append("key=value"); + args.append("arg1"); + args.append("key2=value2"); + assert_eq!(args.to_string(), "key=value arg1 key2=value2"); +} + +#[test] +fn should_convert_to_string_vec() { + let mut args = KernelArgs::new(); + args.parse_append("key=value arg1 key2=value2"); + assert_eq!( + args.to_strv() + .iter() + .map(|s| s.as_str()) + .collect::>(), + vec!["key=value", "arg1", "key2=value2"] + ); +} + +#[test] +fn should_get_last_value() { + let mut args = KernelArgs::new(); + args.append("key=value1"); + args.append("key=value2"); + args.append("key=value3"); + assert_eq!(args.get_last_value("key").unwrap(), "value3"); +} + +#[test] +fn should_convert_from_string() { + let args = KernelArgs::from(String::from("arg1 arg2 arg3=value")); + assert_eq!(args.to_strv(), vec!["arg1", "arg2", "arg3=value"]); +} diff --git a/rust-bindings/rust/src/tests/mod.rs b/rust-bindings/rust/src/tests/mod.rs index 6726a27e..ca79e915 100644 --- a/rust-bindings/rust/src/tests/mod.rs +++ b/rust-bindings/rust/src/tests/mod.rs @@ -1,2 +1,3 @@ mod collection_ref; +mod kernel_args; mod repo; -- 2.30.2